#ifndef MAIN_GAME_STATE_H_INCLUDED
#define MAIN_GAME_STATE_H_INCLUDED

#include "GameState.h"
#include "Singleton.h"
#include "AiAgent.h"
#include "Graph.h"
#include "EventHandler.h"
#include "PointOfInterest.h"
#include "OBJMesh.h"

#include <vector>

class MainGameState : public GameState, Uncopyable
{
private:
	MainGameState();
	friend class Singleton<MainGameState>;

public:
	virtual void Update();
	virtual void Draw();
	virtual void OnActivated();
	virtual void OnDeactivated();
	virtual void OnKeyboardEvent(const SDL_KeyboardEvent&);
	virtual void OnMouseMotionEvent(const SDL_MouseMotionEvent& event);
	virtual void OnMouseButtonDownEvent(const SDL_MouseButtonEvent& event);
	virtual void OnMouseButtonUpEvent(const SDL_MouseButtonEvent& event);
	void Controls();
	std::vector<AiAgent>& ReturnAiVector() {return m_AiAgentVec;} 
	std::vector<PointOfInterest>* ReturnPoIvec() {return &m_PoIVec; }
	void LoadAssets();
	bool LoadAgents();
	

	~MainGameState();

private:

	float m_CameraDistance, m_CameraAngle, m_CameraSpeed, m_CameraHeight;
	Vec3f m_CameraPos;
	std::vector<AiAgent> m_AiAgentVec;
	float m_LightPosition[4];
	std::vector<int> m_Path;
	Graph* m_Graph;
	int m_CameraIndex;
	bool m_ShowAiGraph;
	std::string m_CurrentAgentString;

	std::vector<PointOfInterest> m_PoIVec;
	std::vector<OBJMesh> m_MeshVec;

	//Control Bools
	bool m_LeftMouse;
	bool m_W, m_S;

};

typedef Singleton<MainGameState> TheMainGameState;
#endif